package com.atguigu.gmall.order.api;

import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.common.result.ResultCodeEnum;
import com.atguigu.gmall.common.util.AuthContextHolder;
import com.atguigu.gmall.model.order.OrderInfo;
import com.atguigu.gmall.order.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;

/**
 * @author dyqstart
 * @create 2021-08-20-18:42
 * @since 1.0.0
 */
//api/order/auth/submitOrder?tradeNo=dsajlkdjalkjd
@RequestMapping("/api/order")
@RestController
public class OrderController {

    @Autowired
    OrderService orderService;

    /**
     * consignee: ""
     * consigneeTel: ""
     * deliveryAddress: ""
     * orderComment: ""
     * orderDetailList: null
     * paymentWay: "ONLINE"
     */
    /**
     *
     * @param tradeNo 防重令牌
     * @param orderInfo 前端提交的订单相关数据
     * @return
     */
    @PostMapping("/auth/submitOrder")
    public Result submitOrder(@RequestParam(value = "tradeNo",required = true) String tradeNo,
                              @RequestBody OrderInfo orderInfo,
                              HttpServletRequest request){

        String userId = AuthContextHolder.getUserId(request);

        //TODO 1、先验证令牌，验证失败则不执行 tradeNo
        if (!orderService.checkToken(userId,tradeNo)){
            //true 验证失败
            return Result.build(null, ResultCodeEnum.REPEAT_SUBMIT);
        }


        //TODO 验价。把前端提交来得订单价格和当前商品真的价格进行比对。
        //价格相同，正常下单，不一样，返回 失败 ，并提示哪个商品价格有变化


        //TODO 验库存（基于我们不允许超卖的规则），确保当前订单的的商品库存是不为空的，


        //TODO 锁库存【下单的这一刻执行】锁住库存，库存数量同时-1


        //TODO 订单长时间不支付，订单会被自动取消，【释放库存】


        //TODO 生成订单：给数据库创建订单


        //TODO 库存系统


        return Result.ok();
    }
}
